Multi-part/Form Data Request পাঠানো

Java Technologies - অ্যাপাচি এইচটিটিপি ক্লায়েন্ট (Apache HTTP Client)
165
165

Apache HTTP Client-এ Multi-part/Form Data Request পাঠানো একটি সাধারণ কাজ যখন আপনি ফাইল বা বড় পরিমাণ ডেটা সার্ভারে পাঠাতে চান। এটি সাধারণত ফর্মের মাধ্যমে ফাইল আপলোড করার সময় ব্যবহৃত হয়। Apache HTTP Client-এ multi-part/form-data রিকোয়েস্ট পাঠানোর জন্য HttpPost এবং MultipartEntityBuilder ব্যবহার করা হয়।

Maven Dependency:

প্রথমে, যদি আপনার প্রোজেক্টে Maven ব্যবহৃত হয়, তবে আপনাকে Apache HTTP Client এবং Apache HttpCore লাইব্রেরি সহ কিছু অতিরিক্ত ডিপেনডেন্সি যুক্ত করতে হবে:

<dependency>
    <groupId>org.apache.httpcomponents.client5</groupId>
    <artifactId>httpclient5</artifactId>
    <version>5.4</version>
</dependency>
<dependency>
    <groupId>org.apache.httpcomponents.core5</groupId>
    <artifactId>httpcore5</artifactId>
    <version>5.4</version>
</dependency>
<dependency>
    <groupId>org.apache.httpcomponents.httpclient5</groupId>
    <artifactId>httpclient5</artifactId>
    <version>5.4</version>
</dependency>

উদাহরণ: Multi-part/Form Data Request পাঠানো

এই উদাহরণে আমরা একটি ফাইল এবং কিছু অতিরিক্ত ডেটা সার্ভারে পাঠানোর জন্য multi-part/form-data রিকোয়েস্ট তৈরি করব।

import org.apache.hc.client5.http.impl.classic.HttpClients;
import org.apache.hc.client5.http.impl.classic.CloseableHttpClient;
import org.apache.hc.client5.http.classic.methods.HttpPost;
import org.apache.hc.client5.http.impl.classic.CloseableHttpResponse;
import org.apache.http.entity.mime.MultipartEntityBuilder;
import org.apache.http.entity.mime.content.FileBody;
import org.apache.http.util.EntityUtils;

import java.io.File;
import java.io.IOException;

public class MultiPartRequestExample {
    public static void main(String[] args) {
        try (CloseableHttpClient httpClient = HttpClients.createDefault()) {

            // HTTP POST রিকোয়েস্ট তৈরি
            HttpPost post = new HttpPost("https://your-api-endpoint.com/upload");

            // Multi-part Entity তৈরি
            MultipartEntityBuilder builder = MultipartEntityBuilder.create();

            // ফাইল যোগ করা (যেমন image.jpg)
            FileBody fileBody = new FileBody(new File("path/to/your/file.jpg"));
            builder.addPart("file", fileBody);

            // অতিরিক্ত ফর্ম ডেটা যোগ করা
            builder.addTextBody("username", "exampleUser");
            builder.addTextBody("description", "This is a sample file upload");

            // Multi-part Entity সেট করা
            post.setEntity(builder.build());

            // রিকোয়েস্ট পাঠানো এবং রেসপন্স প্রাপ্তি
            try (CloseableHttpResponse response = httpClient.execute(post)) {
                String responseBody = EntityUtils.toString(response.getEntity());
                System.out.println("Response: " + responseBody);
            }

        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

ব্যাখ্যা:

  1. HttpPost রিকোয়েস্ট তৈরি: এখানে একটি HttpPost রিকোয়েস্ট তৈরি করা হয় যা ফাইল আপলোডের জন্য ব্যবহৃত হবে।
  2. MultipartEntityBuilder: MultipartEntityBuilder.create() মেথড ব্যবহার করে একটি multi-part entity তৈরি করা হয়। এটি ফাইল এবং টেক্সট ডেটা (যেমন username, description) সহ পাঠানো যাবে।
  3. FileBody: ফাইলটি FileBody দ্বারা রিপ্রেজেন্ট করা হয় এবং addPart() মেথড ব্যবহার করে রিকোয়েস্টে যোগ করা হয়। এখানে file হল ফর্ম ফিল্ডের নাম।
  4. addTextBody: অতিরিক্ত ফর্ম ডেটা (যেমন username, description) যোগ করতে addTextBody() ব্যবহার করা হয়।
  5. Entity সেট করা: post.setEntity(builder.build()) ব্যবহার করে multi-part entity পোষ্ট রিকোয়েস্টে সেট করা হয়।
  6. Response: রিকোয়েস্ট পাঠানোর পর, রেসপন্স পাওয়া যায় এবং তার কনটেন্ট কনসোলে প্রিন্ট করা হয়।

সারাংশ:

Apache HTTP Client-এ multi-part/form-data রিকোয়েস্ট পাঠানোর জন্য HttpPost এবং MultipartEntityBuilder ব্যবহার করা হয়। এই উপায়ে ফাইল এবং টেক্সট ডেটা একসঙ্গে সার্ভারে পাঠানো যায়। FileBody দ্বারা ফাইল এবং addTextBody দ্বারা অতিরিক্ত ডেটা যোগ করা হয়।

common.content_added_by

Multi-part Request কি এবং কিভাবে কাজ করে

146
146

Multi-part Request একটি HTTP অনুরোধের ধরন, যা বিশেষ করে ফাইল আপলোড বা বিভিন্ন ধরনের ডেটা একসঙ্গে সার্ভারে পাঠানোর জন্য ব্যবহৃত হয়। সাধারণত, এই ধরনের অনুরোধে Content-Type: multipart/form-data হেডার থাকে, যা সার্ভারকে জানায় যে অনুরোধের মধ্যে একাধিক অংশ রয়েছে, যেমন ফাইল, টেক্সট ডেটা বা অন্যান্য ফর্ম ফিল্ড।

Apache HTTP Client-এ Multi-part Request পাঠানোর জন্য আমরা HttpPost এবং MultipartEntityBuilder ব্যবহার করে একটি অনুরোধ তৈরি করতে পারি। এই অনুরোধের মধ্যে আমরা একাধিক ফর্ম ডেটা বা ফাইল পাঠাতে পারি।

Multi-part Request এর কাজের ধরন

Multi-part request সাধারণত ফর্ম ডেটা বা ফাইল আপলোড করার জন্য ব্যবহৃত হয়। প্রতিটি অংশের মধ্যে আলাদা আলাদা Content-Disposition থাকে, যা পরিষ্কার করে যে কোন অংশটি ফাইল, কোন অংশটি টেক্সট ফিল্ড বা অন্য কিছু।

কোড উদাহরণ: Apache HTTP Client-এ Multi-part Request পাঠানো

import org.apache.http.HttpEntity;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.entity.mime.MultipartEntityBuilder;
import org.apache.http.entity.mime.content.StringBody;
import org.apache.http.entity.mime.content.FileBody;
import org.apache.http.util.EntityUtils;

import java.io.File;

public class ApacheHttpClientMultiPartRequest {
    public static void main(String[] args) {
        // HttpClient তৈরি করুন
        CloseableHttpClient httpClient = HttpClients.createDefault();

        try {
            // HttpPost তৈরি করুন
            HttpPost httpPost = new HttpPost("https://example.com/upload");

            // MultipartEntityBuilder ব্যবহার করে multipart request তৈরি করুন
            MultipartEntityBuilder builder = MultipartEntityBuilder.create();
            
            // ফর্ম ডেটা যোগ করুন (String Data)
            builder.addPart("username", new StringBody("testuser"));

            // ফাইল যোগ করুন (File Upload)
            File file = new File("path/to/your/file.jpg");
            builder.addPart("file", new FileBody(file));

            // তৈরি করা MultipartEntity কে HttpPost এর মধ্যে সেট করুন
            HttpEntity multipart = builder.build();
            httpPost.setEntity(multipart);

            // POST অনুরোধ পাঠান এবং প্রতিক্রিয়া সংগ্রহ করুন
            CloseableHttpResponse response = httpClient.execute(httpPost);

            try {
                // প্রতিক্রিয়া স্ট্যাটাস কোড পড়ুন
                int statusCode = response.getStatusLine().getStatusCode();
                System.out.println("Response Status Code: " + statusCode);

                // HttpEntity থেকে ডেটা পড়ুন
                HttpEntity entity = response.getEntity();
                if (entity != null) {
                    String responseBody = EntityUtils.toString(entity);
                    System.out.println("Response Content: " + responseBody);
                }
            } finally {
                response.close();
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
                // HttpClient বন্ধ করুন
                httpClient.close();
            } catch (Exception ex) {
                ex.printStackTrace();
            }
        }
    }
}

কোড ব্যাখ্যা

  1. HttpClient তৈরি করা

    CloseableHttpClient httpClient = HttpClients.createDefault();
    
    • HttpClients.createDefault() ব্যবহার করে একটি HttpClient অবজেক্ট তৈরি করা হয়েছে।
  2. HttpPost তৈরি করা

    HttpPost httpPost = new HttpPost("https://example.com/upload");
    
    • HttpPost অবজেক্ট তৈরি করা হয়েছে এবং এতে URL সেট করা হয়েছে যেখানে আমরা ফাইল এবং ফর্ম ডেটা পাঠাব।
  3. MultipartEntityBuilder ব্যবহার করা

    MultipartEntityBuilder builder = MultipartEntityBuilder.create();
    
    • MultipartEntityBuilder ব্যবহার করা হয়েছে, যা বিভিন্ন ধরনের ফর্ম ডেটা এবং ফাইল একসাথে তৈরি করতে সাহায্য করে।
  4. ফর্ম ডেটা এবং ফাইল যোগ করা

    builder.addPart("username", new StringBody("testuser"));
    File file = new File("path/to/your/file.jpg");
    builder.addPart("file", new FileBody(file));
    
    • প্রথমে একটি টেক্সট ফর্ম ডেটা (username) যোগ করা হয়েছে।
    • তারপর একটি ফাইল (file.jpg) যোগ করা হয়েছে।
  5. MultipartEntity তৈরি করা

    HttpEntity multipart = builder.build();
    httpPost.setEntity(multipart);
    
    • MultipartEntityBuilder থেকে HttpEntity তৈরি করা হয়েছে, যা HttpPost অনুরোধে সেট করা হয়েছে।
  6. POST অনুরোধ পাঠানো এবং প্রতিক্রিয়া গ্রহণ করা
    • httpClient.execute(httpPost) ব্যবহার করে GET অনুরোধ পাঠানো হয়েছে এবং প্রতিক্রিয়া (HttpResponse) প্রাপ্ত হয়েছে।
    • তারপর EntityUtils.toString() ব্যবহার করে প্রতিক্রিয়া বডি পড়া হয়েছে।

Multi-part Request এর সুবিধা

  • ফাইল আপলোড: এটি বড় ফাইল এবং একাধিক ফাইল একই সাথে সার্ভারে আপলোড করার জন্য আদর্শ।
  • ফর্ম ডেটা: ফর্ম ফিল্ড এবং অন্যান্য ডেটা একসাথে সার্ভারে পাঠানো যেতে পারে।
  • বিভিন্ন ডেটা টাইপ: একটি অনুরোধে একাধিক ডেটা টাইপ (যেমন, টেক্সট, ফাইল, ইমেজ) পাঠানো সম্ভব।

সারাংশ

Apache HTTP Client-এ Multi-part Request ব্যবহারের মাধ্যমে ফাইল এবং টেক্সট ডেটা একসাথে সার্ভারে পাঠানো সম্ভব। MultipartEntityBuilder ব্যবহার করে, একাধিক ফর্ম ফিল্ড এবং ফাইল পাঠানোর জন্য সহজেই HttpPost অনুরোধ তৈরি করা যায়। এটি সাধারণত ফাইল আপলোড এবং ফর্ম ডেটা পাঠানোর ক্ষেত্রে ব্যবহৃত হয়।

common.content_added_by

File Uploading এবং Multi-part File Handling

139
139

অ্যাপাচি HTTP ক্লায়েন্ট (Apache HTTP Client) ব্যবহার করে ফাইল আপলোডিং এবং Multi-part File Handling একটি সাধারণ কাজ, যা বিশেষত ফাইল আপলোডের জন্য HTTP POST অনুরোধের মাধ্যমে সার্ভারে ফাইল পাঠানোর সময় ব্যবহৃত হয়। এই প্রক্রিয়ায়, আপনি ফাইলের সাথে অন্যান্য ডেটা (যেমন ফর্ম ফিল্ড) পাঠাতে পারেন। এটি সাধারণত multipart/form-data কন্টেন্ট টাইপের সাথে কাজ করে।

File Uploading এবং Multi-part File Handling কীভাবে কাজ করে

  1. Multi-part Request: যখন আপনি ফাইল আপলোড করতে চান, তখন আপনাকে multipart/form-data কন্টেন্ট টাইপ ব্যবহার করতে হবে। এই ধরনের অনুরোধে একাধিক অংশ থাকে, যেমন ফাইল এবং অন্যান্য ফর্ম ডেটা।
  2. File Handling: ফাইলের ডেটা FileBody অবজেক্টের মাধ্যমে পাঠানো হয়, যা MultipartEntityBuilder ব্যবহার করে কনফিগার করা হয়। আপনি ফর্ম ফিল্ডগুলোকে StringBody বা অন্য কনটেন্ট টাইপ দিয়ে পাঠাতে পারেন।

কোড উদাহরণ: ফাইল আপলোড এবং Multi-part File Handling

import org.apache.http.HttpEntity;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.entity.mime.MultipartEntityBuilder;
import org.apache.http.entity.mime.content.FileBody;
import org.apache.http.util.EntityUtils;
import java.io.File;

public class FileUploadExample {
    public static void main(String[] args) {
        // HttpClient তৈরি করা
        CloseableHttpClient httpClient = HttpClients.createDefault();

        try {
            // POST অনুরোধ তৈরি করা
            HttpPost httpPost = new HttpPost("https://example.com/upload");

            // MultipartEntityBuilder ব্যবহার করে Multi-part ফাইল তৈরি করা
            MultipartEntityBuilder builder = MultipartEntityBuilder.create();

            // ফাইল যোগ করা (ফাইল আপলোড)
            File file = new File("path/to/your/file.jpg");
            builder.addPart("file", new FileBody(file));

            // অন্যান্য ফর্ম ডেটা যোগ করা (যেমন: ব্যবহারকারীর নাম)
            builder.addTextBody("username", "testuser");

            // MultipartEntity তৈরি করা
            HttpEntity multipart = builder.build();

            // HttpPost-এ MultipartEntity সেট করা
            httpPost.setEntity(multipart);

            // POST অনুরোধ পাঠানো এবং সার্ভারের প্রতিক্রিয়া গ্রহণ
            CloseableHttpResponse response = httpClient.execute(httpPost);

            try {
                // সার্ভারের স্ট্যাটাস কোড দেখানো
                int statusCode = response.getStatusLine().getStatusCode();
                System.out.println("Response Status Code: " + statusCode);

                // সার্ভারের প্রতিক্রিয়া বডি পড়া
                HttpEntity entity = response.getEntity();
                if (entity != null) {
                    String responseBody = EntityUtils.toString(entity);
                    System.out.println("Response Content: " + responseBody);
                }
            } finally {
                response.close();
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
                // HttpClient বন্ধ করা
                httpClient.close();
            } catch (Exception ex) {
                ex.printStackTrace();
            }
        }
    }
}

কোড ব্যাখ্যা

  1. HttpClient তৈরি করা

    CloseableHttpClient httpClient = HttpClients.createDefault();
    
    • HttpClients.createDefault() ব্যবহার করে একটি HttpClient অবজেক্ট তৈরি করা হয়েছে, যা HTTP অনুরোধ পাঠাতে ব্যবহার করা হবে।
  2. HttpPost তৈরি করা

    HttpPost httpPost = new HttpPost("https://example.com/upload");
    
    • HttpPost অবজেক্ট তৈরি করা হয়েছে, যা URL ("https://example.com/upload") তে POST অনুরোধ পাঠাবে।
  3. MultipartEntityBuilder ব্যবহার করা

    MultipartEntityBuilder builder = MultipartEntityBuilder.create();
    
    • MultipartEntityBuilder ব্যবহার করে multipart/form-data অনুরোধের জন্য কনটেন্ট তৈরি করা হয়।
  4. ফাইল যোগ করা

    builder.addPart("file", new FileBody(file));
    
    • FileBody ব্যবহার করে ফাইল যোগ করা হয়েছে। এখানে, "file" হল ফাইলের ফর্ম ফিল্ড নাম এবং new FileBody(file) হল আপলোড করার ফাইলটি।
  5. অন্য ফর্ম ডেটা যোগ করা

    builder.addTextBody("username", "testuser");
    
    • addTextBody ব্যবহার করে একটি ফর্ম ডেটা (যেমন ব্যবহারকারীর নাম) পাঠানো হয়েছে।
  6. MultipartEntity তৈরি করা

    HttpEntity multipart = builder.build();
    
    • MultipartEntityBuilder থেকে HttpEntity তৈরি করা হয়েছে, যা POST অনুরোধে সেট করা হয়েছে।
  7. POST অনুরোধ পাঠানো

    CloseableHttpResponse response = httpClient.execute(httpPost);
    
    • httpClient.execute(httpPost) ব্যবহার করে POST অনুরোধটি পাঠানো হয়েছে এবং সার্ভারের প্রতিক্রিয়া প্রাপ্ত হয়েছে।
  8. প্রতিক্রিয়া বডি পড়া

    String responseBody = EntityUtils.toString(entity);
    System.out.println("Response Content: " + responseBody);
    
    • EntityUtils.toString(entity) ব্যবহার করে সার্ভারের প্রতিক্রিয়া বডি পড়া হয়েছে এবং প্রিন্ট করা হয়েছে।

ফাইল আপলোড এবং Multi-part Handling এর সুবিধা

  • একাধিক ফাইল আপলোড: একাধিক ফাইল একসঙ্গে পাঠানো সম্ভব।
  • ফর্ম ডেটার সাথে ফাইল সংযুক্ত করা: ফর্ম ফিল্ডস (যেমন ব্যবহারকারীর নাম, ইমেইল) ফাইলের সাথে একত্রে পাঠানো যেতে পারে।
  • এমবেডেড ফাইল: ফাইলকে সহজে HTTP অনুরোধের অংশ হিসেবে পাঠানো সম্ভব।
  • সহজ কনফিগারেশন: Apache HTTP Client-এ MultipartEntityBuilder ব্যবহার করে এটি করা সহজ এবং পরিষ্কার।

সারাংশ

Apache HTTP Client ব্যবহার করে ফাইল আপলোড এবং Multi-part File Handling একটি সাধারণ এবং কার্যকরী প্রক্রিয়া। MultipartEntityBuilder এবং FileBody ব্যবহার করে একাধিক ফাইল এবং ফর্ম ডেটা একসাথে পাঠানো যায়। এটি সাধারণত ফাইল আপলোড এবং বিভিন্ন ধরনের ডেটা (যেমন টেক্সট, ইমেজ, ইত্যাদি) একত্রে সার্ভারে পাঠানোর জন্য ব্যবহৃত হয়।

common.content_added_by

FormData Request পাঠানো

158
158

Apache HTTP Client: FormData Request পাঠানো

Apache HTTP Client ব্যবহার করে FormData পাঠানো একটি সাধারণ প্রক্রিয়া, যা ফর্ম ডেটা বা অন্যান্য ধরনের ডেটা (যেমন ফাইল) POST request-এর মাধ্যমে পাঠানোর জন্য ব্যবহৃত হয়। এই ধরনের ডেটা পাঠাতে, HttpPost এবং MultipartEntityBuilder ব্যবহার করা হয়।

FormData Request পাঠানোর পদ্ধতি:

ফর্ম ডেটা পাঠাতে হলে, MultipartEntityBuilder ব্যবহার করে POST request তৈরি করতে হয়। এটি বিভিন্ন ধরনের ডেটা (যেমন টেক্সট, ফাইল, ইমেজ ইত্যাদি) মিশ্রণ করতে সাহায্য করে এবং ডেটাকে multipart/form-data ফরম্যাটে সার্ভারে পাঠায়।

কোড উদাহরণ:

import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.mime.MultipartEntityBuilder;
import org.apache.http.entity.mime.content.StringBody;
import org.apache.http.entity.mime.content.FileBody;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.util.EntityUtils;
import java.io.File;

public class ApacheHttpClientFormDataExample {
    public static void main(String[] args) {
        // HttpClient তৈরি করা
        try (CloseableHttpClient httpClient = HttpClients.createDefault()) {

            // POST Request এর URL
            String url = "https://example.com/upload";

            // HttpPost অবজেক্ট তৈরি
            HttpPost postRequest = new HttpPost(url);

            // MultipartEntityBuilder ব্যবহার করে FormData তৈরি
            MultipartEntityBuilder builder = MultipartEntityBuilder.create();
            
            // ফর্ম ডেটা যোগ করা (যেমন text)
            builder.addPart("name", new StringBody("John Doe"));
            builder.addPart("age", new StringBody("30"));
            
            // ফাইল ডেটা যোগ করা (যেমন image)
            File file = new File("path/to/your/file.txt");
            builder.addPart("file", new FileBody(file));

            // Request Entity সেট করা
            HttpEntity entity = builder.build();
            postRequest.setEntity(entity);

            // POST Request পাঠানো এবং Response গ্রহণ করা
            HttpResponse response = httpClient.execute(postRequest);

            // Response থেকে স্ট্যাটাস কোড এবং কন্টেন্ট নেওয়া
            int statusCode = response.getStatusLine().getStatusCode();
            System.out.println("Response Code: " + statusCode);

            HttpEntity responseEntity = response.getEntity();
            if (responseEntity != null) {
                String responseBody = EntityUtils.toString(responseEntity);
                System.out.println("Response Body: " + responseBody);
            }

        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

ব্যাখ্যা:

  1. MultipartEntityBuilder:
    • MultipartEntityBuilder.create(): এটি একটি নতুন MultipartEntityBuilder তৈরি করে যা বিভিন্ন ফর্ম ডেটা এবং ফাইল সংযোজন করতে ব্যবহৃত হয়।
    • addPart("name", new StringBody("John Doe")): এখানে ফর্ম ফিল্ড "name" এর মান "John Doe" পাঠানো হচ্ছে।
    • addPart("file", new FileBody(file)): এখানে একটি ফাইল পাঠানো হচ্ছে, যা FileBody দ্বারা চিহ্নিত।
  2. HttpPost request:
    • POST request তৈরি করা হয়েছে এবং তার পর setEntity() মেথড ব্যবহার করে ফর্ম ডেটা এবং ফাইল Entity হিসেবে সেট করা হয়েছে।
  3. Response Handling:
    • Response কোড এবং কন্টেন্ট EntityUtils.toString() ব্যবহার করে পাঠানো ডেটা রিড করা হয়েছে।

Important Headers:

  • Content-Type: Multipart/form-data ফরম্যাটে ডেটা পাঠানো হয়, যা ফাইল এবং অন্যান্য ফর্ম ডেটার জন্য ব্যবহার করা হয়।
  • HttpEntity: এটি POST request-এর মাধ্যমে পাঠানো ডেটা সংরক্ষণ করে।

সারাংশ:

Apache HTTP Client ব্যবহার করে FormData পাঠানো খুবই সহজ, বিশেষত MultipartEntityBuilder ব্যবহার করে ফর্ম ডেটা এবং ফাইল একত্রে সার্ভারে পাঠানো যায়। এই পদ্ধতি সাধারণত ফাইল আপলোড এবং ফর্ম ডেটা পাঠানোর জন্য ব্যবহৃত হয়। StringBody এবং FileBody-এর মাধ্যমে টেক্সট এবং ফাইল ডেটা ফর্মে পাঠানো হয় এবং সার্ভার থেকে response পাওয়া যায়।

common.content_added_by
টপ রেটেড অ্যাপ

স্যাট অ্যাকাডেমী অ্যাপ

আমাদের অল-ইন-ওয়ান মোবাইল অ্যাপের মাধ্যমে সীমাহীন শেখার সুযোগ উপভোগ করুন।

ভিডিও
লাইভ ক্লাস
এক্সাম
ডাউনলোড করুন
Promotion